package com.wgy.day24.List集合接口;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * Created by pc on 2020/11/21 23:23
 * Description: LearningJava
 */
/*
java.util.list接口 extends Collection接口
List接口的特点:
           1.有序的集合
           2.有索引,包含了一些带索引的方法
           3.允许存储重复的元素

List接口中带索引的方法(特有):
     public void add(int index,E element): 将指定的元素,添加到该集合中的指定位置上
     public E get(int index): 返回集合中指定位置的元素
     public E remove(int index): 移除集合中指定位置的元素,返回被移除的元素
     public E set(int index,E element): 用指定元素替换集合中指定位置的元素,返回值是更新前的元素

注意:操作索引的时候,一定要防止索引越界异常
     index out of bounds exception: 索引越界异常
     Array index out of bounds exception: 数组索引越界异常
     String index out of bounds exception:字符串索引越界异常
*/
public class Demo01List {
    public static void main(String[] args) {
        //创建一个List对象,使用的是多态
        List<String> list = new ArrayList<>();
        //使用List接口中add方法,往集合中添加元素
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        list.add("a");
        System.out.println(list);//[a, b, c, d, a] 不是地址值,说明List接口重写了toString 方法
        //使用remove方法,移除列表中指定位置的元素,返回的是被移除的元素
        String removeE = list.remove(2);
        System.out.println("被移除的元素是:"+removeE);//c
        System.out.println(list);//[a, b, d, a]
        //使用add(int index,E element)方法,将指定的元素,添加到该集合中的指定位置上
        list.add(3, "world");
        System.out.println(list);//[a, b, d, world, a]
        //使用set(int index,E element): 用指定元素替换集合中指定位置的元素,返回值是更新前的元素
        String str = list.set(3, "hello");
        System.out.println("被替换的元素是:"+str);//world
        System.out.println(list);//[a, b, d, hello, a]

        //List集合的遍历有3中方法
        //使用for循环
        for (int i = 0; i < list.size(); i++) {
            //使用 get(int index): 返回集合中指定位置的元素
            String s = list.get(i);
            System.out.println(s);
        }
        //使用迭代器
        Iterator<String> it = list.iterator();
        while (it.hasNext()) {
            String s = it.next();
            System.out.println(s);
        }
        //使用增强for
        for (String s:list){
            System.out.println(s);
        }

        String r=list.get(5);//索引值超出数组的长度
        System.out.println(r);//运行时会引发索引越界异常  这样的情况要避免

    }
}
